/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package com.siga.controlador;

import com.siga.modelo.DAO.AulaDAO;
import com.siga.modelo.DAO.CarreraDAO;
import com.siga.modelo.DAO.CursoDAO;
import com.siga.modelo.DAO.PlanDAO;
import com.siga.modelo.DAO.SemestreDAO;
import com.siga.modelo.entidad.*;
import java.io.IOException;
import java.io.PrintWriter;
import java.math.BigDecimal;
import java.util.Collection;
import java.util.Date;
import java.util.List;
import javax.servlet.RequestDispatcher;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

/**
 *
 * @author karolyn
 */
public class controlador extends HttpServlet {

    AulaDAO adao;
    CursoDAO Cdao;
    CarreraDAO Cadao;
    SemestreDAO Sdao;
    PlanDAO pdao;

    @Override
    public void destroy() {
        adao.closeEntityManager();
        Cdao.closeEntityManager();
        Cadao.closeEntityManager();
        Sdao.closeEntityManager();
        pdao.closeEntity();
    }

    @Override
    public void init() throws ServletException {
        Cdao = new CursoDAO();
        adao=new AulaDAO();
        Cadao=new CarreraDAO();
        Sdao=new SemestreDAO();
        pdao = new PlanDAO();
    }
    
    protected void processRequest(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        String operacion = request.getParameter("operacion");
        
        if(operacion.equalsIgnoreCase("aula"))
            response.sendRedirect("Aula.jsp");
        if(operacion.equalsIgnoreCase("plan"))
            response.sendRedirect("Plan.jsp");
        if(operacion.equalsIgnoreCase("curso"))
            response.sendRedirect("Curso.jsp");
        if(operacion.equalsIgnoreCase("carrera"))
            response.sendRedirect("Carrera.jsp");
        if(operacion.equalsIgnoreCase("semestre"))
            response.sendRedirect("Semestre.jsp");
        //Aula
        if(operacion.equalsIgnoreCase("nuevaAula"))
            response.sendRedirect("insertaAula.jsp");
        if(operacion.equalsIgnoreCase("listadoAula")){
            request.setAttribute("aulas", adao.listarAulas());
            RequestDispatcher rd = request.getRequestDispatcher("/listaAulas.jsp");
            rd.forward(request, response);
        }
        if(operacion.equalsIgnoreCase("busquedaAula"))
            response.sendRedirect("buscaAula.jsp");
        
        if(operacion.equalsIgnoreCase("insertarAula")){
            Aula a = new Aula();
            boolean flag;
            String nombre = request.getParameter("txtNombre");
            a.setDescAula(nombre);
            a.setActivo(true);
            
            flag = adao.insertarAula(a);
            if(flag)
                response.sendRedirect("exito.jsp");
            else
                response.sendRedirect("error.jsp");
        }
        if(operacion.equalsIgnoreCase("buscarAula")){
            Aula a = adao.buscarAula(request.getParameter("txtNombre"), Integer.parseInt(request.getParameter("cmbTipo")));
            if(a!=null){
                request.setAttribute("aula", a);
                RequestDispatcher rd = request.getRequestDispatcher("/aulaEncontrada.jsp");
                rd.forward(request, response);
            }
            else
                response.sendRedirect("error.jsp");
        }
        if(operacion.equalsIgnoreCase("eliminaraula")) {
            if(adao.eliminarAula(Integer.parseInt(request.getParameter("codigo"))))
                response.sendRedirect("exito.jsp");
            else
                response.sendRedirect("error.jsp");
        }
        //Curso
        if(operacion.equalsIgnoreCase("nuevoCurso")){
            response.sendRedirect("insertarCurso.jsp");
        }
        if(operacion.equalsIgnoreCase("busquedaCurso")){
            response.sendRedirect("buscarCurso.jsp");
        }
        if(operacion.equalsIgnoreCase("listadoCurso")){
            request.setAttribute("ListaCursos",Cdao.getListaCursos());
            RequestDispatcher rd= request.getRequestDispatcher("/listadoCursos.jsp");
            rd.forward(request, response);
        }
        
        if(operacion.equalsIgnoreCase("guardarCurso")){
            String codigo=request.getParameter("codigo");
            String descripcion=request.getParameter("descripcion");
            BigDecimal horaTeoria=BigDecimal.valueOf(Double.parseDouble(request.getParameter("horaTeoria")));
            BigDecimal horaPractica=BigDecimal.valueOf(Double.parseDouble(request.getParameter("horaPractica")));
            int creditos=Integer.parseInt(request.getParameter("creditos"));
            Curso c= new Curso();
            c.setCodCurso(codigo);
            c.setDescCurso(descripcion);
            c.setHoraTeoria(horaTeoria);
            c.setHoraPractica(horaPractica);
            c.setCreditos(creditos);
            c.setActivo(true);
            if(Cdao.insertarCurso(c))
                response.sendRedirect("exito.jsp");
            else
                response.sendRedirect("error.jsp");
        }
        if(operacion.equalsIgnoreCase("buscarCursoPorCodigo")){
            String codigo=request.getParameter("txtCodigo");
            Curso c=Cdao.buscarCurso(codigo);
            if(c==null)
                response.sendRedirect("error.jsp");
            else{
                request.setAttribute("cur", c);
                RequestDispatcher rd=request.getRequestDispatcher("/cursoBuscado.jsp");
                rd.forward(request, response);
            }
        }
        if(operacion.equalsIgnoreCase("listarCurso")){
            request.setAttribute("ListaCursos",Cdao.getListaCursos());
            RequestDispatcher rd= request.getRequestDispatcher("/listadoCursos.jsp");
            rd.forward(request, response);
        }
        if(operacion.equalsIgnoreCase("eliminarCurso")){
            String codigo=request.getParameter("codigo");
            if(Cdao.eliminarCurso(codigo)){
                response.sendRedirect("exito.jsp");
            }                
            else{
                response.sendRedirect("error.jsp");
            }
                
        }
        //Carrera
        if(operacion.equalsIgnoreCase("nuevaCarrera")){
            response.sendRedirect("insertarCarrera.jsp");
        }
        if(operacion.equalsIgnoreCase("busquedaCarrera")){
            response.sendRedirect("buscarCarrera.jsp");
        }
        if(operacion.equalsIgnoreCase("listadoCarrera")){
            request.setAttribute("ListaCarreras",Cadao.getListaCarreras());
            RequestDispatcher rd= request.getRequestDispatcher("/listadoCarreras.jsp");
            rd.forward(request, response);
        }
        if(operacion.equalsIgnoreCase("guardarCarrera")){
            String codigo=request.getParameter("codigo");
            String descripcion=request.getParameter("descripcion");
            Boolean activo=Boolean.getBoolean(request.getParameter("activo"));
            Carrera ca= new Carrera();
            ca.setCodCarrera(codigo);
            ca.setDescCarrera(descripcion);
            ca.setActivo(activo);    
            if(Cadao.insertarCarrera(ca))
                response.sendRedirect("exito.jsp");
            else
                response.sendRedirect("error.jsp");
        }
        if(operacion.equalsIgnoreCase("buscarCarreraPorCodigo")){
            String codigo=request.getParameter("txtCodigo");
            Carrera ca=Cadao.buscarCarrera(codigo);
            if(ca==null)
                response.sendRedirect("error.jsp");
            else{
                request.setAttribute("car", ca);
                RequestDispatcher rd=request.getRequestDispatcher("/carreraBuscada.jsp");
                rd.forward(request, response);
            }
        }
        if(operacion.equalsIgnoreCase("eliminarCarrera")){
            String codigo=request.getParameter("codigo");
            if(Cadao.eliminarCarrera(codigo))
                response.sendRedirect("exito.jsp");
            else
                response.sendRedirect("error.jsp");
        }
        //Semestre
        else if(operacion.equalsIgnoreCase("insertarsemestre")){
            response.sendRedirect("insertarsemestre.jsp");
        }
        else if(operacion.equalsIgnoreCase("guardarsemestre")){
            String codigo=request.getParameter("txtcodigo");
            String fechainicio=request.getParameter("txtfinicio");
            String fechafin=request.getParameter("txtffin");
            Boolean vigencia=Boolean.parseBoolean(request.getParameter("txtvigencia"));
            Semestre sem= new Semestre();
            sem.setCodSemestre(codigo);
            sem.setFecInicio(fechainicio);
            sem.setFecFin(fechafin);
            sem.setVigente(vigencia);
            if(Sdao.insertarSemestre(sem)){
                response.sendRedirect("exito.jsp");}
            else
                response.sendRedirect("error.jsp");
        }
        else if(operacion.equalsIgnoreCase("buscarsemestre")){
            response.sendRedirect("busquedaS.jsp");
        }else if(operacion.equalsIgnoreCase("buscasem")){
            String codigo=request.getParameter("txtcodigo");
            Semestre sem=Sdao.buscarSemestre(codigo);
            if(sem==null){
                response.sendRedirect("error.jsp");
            }else{
                request.setAttribute("semestre", sem);
                RequestDispatcher rd=request.getRequestDispatcher("/muestraS.jsp");
                rd.forward(request, response);
            }
        }
        else if(operacion.equalsIgnoreCase("listarsemestre")){
           
            request.setAttribute("semestres", Sdao.getListaSemestre());
            RequestDispatcher rd=request.getRequestDispatcher("/listaS.jsp");
            rd.forward(request, response);
        }
        else if(operacion.equalsIgnoreCase("eliminarS")){
              String codigo=request.getParameter("codigo");            
            if(Sdao.eliminarSemestre(codigo)){
                response.sendRedirect("exito.jsp");                
            }else  {
                response.sendRedirect("error.jsp");
               
            }
        }
        //Plan
        if(operacion.equalsIgnoreCase("nuevoPlan")){
            request.setAttribute("carreras", Cadao.getListaCarreras());
            RequestDispatcher rd = request.getRequestDispatcher("/insertaPlan.jsp");
            rd.forward(request, response);
        }
        if(operacion.equalsIgnoreCase("insertarPlan")){
            Plan p = new Plan();
            p.setCodCarrera(Cadao.buscarCarrera("800"));
            p.setFechaCreacion("2012-02-01");
            p.setVigente(true);
            p.setDetallePlanCollection(null);
            if(pdao.insertarPlan(p))
                response.sendRedirect("exito.jsp");
            else
                response.sendRedirect("error.jsp");
        }
    }
    // <editor-fold defaultstate="collapsed" desc="HttpServlet methods. Click on the + sign on the left to edit the code.">
    /**
     * Handles the HTTP
     * <code>GET</code> method.
     *
     * @param request servlet request
     * @param response servlet response
     * @throws ServletException if a servlet-specific error occurs
     * @throws IOException if an I/O error occurs
     */
    @Override
    protected void doGet(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        processRequest(request, response);
    }

    /**
     * Handles the HTTP
     * <code>POST</code> method.
     *
     * @param request servlet request
     * @param response servlet response
     * @throws ServletException if a servlet-specific error occurs
     * @throws IOException if an I/O error occurs
     */
    @Override
    protected void doPost(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        processRequest(request, response);
    }

    /**
     * Returns a short description of the servlet.
     *
     * @return a String containing servlet description
     */
    @Override
    public String getServletInfo() {
        return "Short description";
    }// </editor-fold>
}